package com.lb.dao.redis;

import org.springframework.lang.Nullable;

import java.time.Duration;

import static com.lb.base.constants.RedisConstants.EXPIRE_TEN_SEC;

/**
 * Redis Key 过期监听器
 *
 * @author xiemingzhi
 * @since 2.0.0
 */
public interface RedisKeyExpiredListener {

    /**
     * 过期 key 是否匹配
     *
     * @param key 过期 key
     * @return true:匹配，false:不匹配
     */
    boolean match(String key);

    /**
     * 匹配执行
     *
     * @param key   过期 key
     * @param value 值
     */
    void execute(String key, @Nullable Object value);

    /**
     * 执行方法添加 redis lock 的过期时间
     *
     * @return 默认10秒
     */
    default Duration timeout() {
        return EXPIRE_TEN_SEC;
    }
}
